package com.atdel.demo14;


/**
 * @BelongsProject: java_study
 * @BelongsPackage: com.atdel.demo14
 * @Author: Del
 * @CreateTime: 2025-03-12  19:40
 * @Description: TODO
 * @Version: 1.0
 */
public class UserThread extends Thread {
    // 打印机
    private Printer printer;

    // 用户
    private String name;

    // 内容
    private String content;

    // 1: 同步方法, 2: 同步块, 3: Class锁, 4: 自定义锁
    private int mode;

    public UserThread(Printer printer, String name, String content, int mode) {
        this.printer = printer;
        this.name = name;
        this.content = content;
        this.mode = mode;
    }


    /***
     * @author: Del
     * @date: 2025/3/12 19:47
     * @param: []
     * @return: void
     * @description: 根据不同的模式执行相应的打印操作。此方法覆盖了父类的run方法，旨在通过多线程
     *               环境下使用不同的同步机制来打印内容。选择不同的模式，使用不同的同步方法，
     *               以确保在多线程环境下安全地打印信息。
     **/
    @Override
    public void run() {
        // 根据模式选择不同的同步打印方法
        switch (mode) {
            case 1:
                // 使用同步方法实现打印
                printer.printWithSyncMethod(name, content);
                break;
            case 2:
                // 使用同步块实现打印
                printer.printWithSyncBlock(name, content);
                break;
            case 3:
                // 使用类级别的锁实现打印
                printer.printWithClassLock(name, content);
                break;
            case 4:
                // 使用自定义锁实现打印
                printer.printWithCustomLock(name, content);
                break;
            default:
                // 当模式值不是预定义的选项时，输出错误信息
                System.out.println("Invalid mode");
        }
    }
}
